package com.heatup.apt.management.task;

import java.util.Date;
import java.util.List;
import java.util.Map;

import com.heatup.apt.management.util.ManageConfigPropertiesUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import com.heatup.apt.common.dao.OrderInfoMapper;
import com.heatup.apt.management.pay.RefundSelect;
import com.heatup.apt.model.order.OrderInfo;

/**
 * 修改订单状态的定时器
 * @author jixiangyun
 * 2016年11月2日 下午2:27:50
 */
@Component
@EnableScheduling   //Spring 4.X版本需要此注解
public class OrderPayStatusTask {

	private final static Logger log = LoggerFactory.getLogger(OrderPayStatusTask.class);
	@Autowired
	private OrderInfoMapper orderInfoMapper;
	 
	/**
	 * java定时器：
	 *
	 * 字段 允许值 允许的特殊字符 秒 0-59 , - * / 分 0-59 , - * / 小时 0-23 , - * / 日期 1-31 , -
	 * * ? / L W C 月份 1-12 或者 JAN-DEC , - * / 星期 1-7 或者 SUN-SAT , - * ? / L C #
	 * 年（可选） 留空, 1970-2099 , - * / - 区间 通配符 ? 你不想设置那个字段
	 */
	@Scheduled(cron = "1 */30 * * * ?") // 每当分钟取模5为1时秒钟到0 05:01 10:01 执行一次 test
										// 3min 1 */5 * * * ?
	public void updateOrderPayStatus() {

		String TOKEN_UPDATE_FLAG = ManageConfigPropertiesUtil.getString("token_update_flag").trim();

		// 1测试/正式环境才启动定时器
		if ("1".equals(TOKEN_UPDATE_FLAG)) {
			try {
				List<OrderInfo> orderList = orderInfoMapper.queryInPaymentOrder();
				log.info("==============================================查询订单状态是付款中的订单 start time " + (new Date())
						+ "=======================================大小：" + orderList.size());
				Map map = null;
				if (orderList.size() > 0) {
					for (OrderInfo order : orderList) {
						map = RefundSelect.orderQuery(order.getTradeNo());
						// 微信后台对公账户收到了钱
						if ("SUCCESS".equals(map.get("result_code")) && "SUCCESS".equals(map.get("trade_state"))) {
							order.setPayStatus("1");
							int bool = orderInfoMapper.updateSelectiveById(order);
							log.info("===============================update orderInfo trade_id :" + order.getTradeId()
									+ "=============================================");
						}
					}
				}
			} catch (Exception e) {
				e.printStackTrace();
				log.error("===>修改订单状态的定时器出现异常===" + e.toString() + e.getCause());
			}
			log.info("==============================================查询订单状态是付款中的订单 end time " + (new Date())
					+ "=======================================");
		}
	}
    
}
